package com.zaimokuza.cn.mapper;

import com.github.pagehelper.Page;
import com.zaimokuza.cn.entity.auth.Role;
import com.zaimokuza.cn.entity.auth.UserRoleRelation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.ArrayList;

/**
 * @author zaimokuza
 */
@Mapper
public interface RoleMapper {

    /**
     * 添加角色
     *
     * @param role 角色信息
     */
    void insertRecord(Role role);

    /**
     * 批量添加用户角色关联信息
     *
     * @param userRoleRelation 用户及对应的角色信息
     */
    void insertBatchUserRoleRelation(UserRoleRelation userRoleRelation);

    /**
     * 根据角色ID更新角色名称
     *
     * @param role 角色信息
     */
    void updateRecord(Role role);

    /**
     * 根据角色ID删除角色
     *
     * @param id 角色ID
     */
    void deleteRecord(String id);

    /**
     * 根据用户ID批量删除用户角色关联信息
     *
     * @param userId 用户ID
     */
    void deleteBatchUserRoleRelationByUserId(String userId);

    /**
     * 根据角色ID批量删除用户角色关联信息
     *
     * @param roleId 角色ID
     */
    void deleteBatchUserRoleRelationByRoleId(String roleId);

    /**
     * 根据用户ID查询拥有的角色ID集合
     *
     * @param userId 用户ID
     * @return 角色ID集合
     */
    ArrayList<String> queryRoleIdListByUserId(String userId);

    /**
     * 查询角色分页信息
     *
     * @param name 名称
     * @return 角色分页信息
     */
    Page<Role> queryRolePage(String name);

    /**
     * 根据用户ID查询拥有的角色集合
     *
     * @param userId 用户ID
     * @return 角色集合
     */
    ArrayList<Role> queryRoleListByUserId(String userId);

    /**
     * 根据资源ID查询可访问该资源的所有角色信息
     *
     * @param resourcesId 资源ID
     * @return 角色信息集合
     */
    ArrayList<Role> queryRoleListByResourcesId(Long resourcesId);

    /**
     * 查询角色名称是否被使用
     *
     * @param roleId 角色ID
     * @param name   名称
     * @return 1:被使用；null：未使用
     */
    Integer queryNameIsUse(@Param("roleId") String roleId, @Param("name") String name);

}
